package com.zenithmind.task.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zenithmind.common.result.PageResult;
import com.zenithmind.task.pojo.entity.TaskFollower;
import com.zenithmind.task.pojo.query.TaskFollowerQuery;
import com.zenithmind.task.pojo.vo.TaskFollowerVO;

import java.util.List;

/**
 * 任务关注服务接口
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
public interface TaskFollowerService extends IService<TaskFollower> {

    /**
     * 分页查询任务关注列表
     *
     * @param query 查询条件
     * @param userId 当前用户ID
     * @return 分页结果
     */
    PageResult<TaskFollowerVO> getTaskFollowerPage(TaskFollowerQuery query, String userId);

    /**
     * 根据ID查询任务关注详情
     * 
     * @param id 关注ID
     * @param userId 当前用户ID
     * @return 关注详情
     */
    TaskFollowerVO getTaskFollowerById(String id, String userId);

    /**
     * 创建任务关注
     * 
     * @param taskFollower 关注信息
     * @param userId 创建者ID
     * @return 创建结果
     */
    Boolean createTaskFollower(TaskFollower taskFollower, String userId);

    /**
     * 删除任务关注
     * 
     * @param id 关注ID
     * @param userId 操作者ID
     * @return 删除结果
     */
    Boolean deleteTaskFollower(String id, String userId);

    /**
     * 关注任务
     * 
     * @param taskId 任务ID
     * @param userId 用户ID
     * @return 关注结果
     */
    Boolean followTask(String taskId, String userId);

    /**
     * 取消关注任务
     * 
     * @param taskId 任务ID
     * @param userId 用户ID
     * @return 取消关注结果
     */
    Boolean unfollowTask(String taskId, String userId);

    /**
     * 检查是否已关注任务
     * 
     * @param taskId 任务ID
     * @param userId 用户ID
     * @return 是否已关注
     */
    Boolean isFollowing(String taskId, String userId);

    /**
     * 查询任务的关注者列表
     * 
     * @param taskId 任务ID
     * @param userId 当前用户ID
     * @return 关注者列表
     */
    List<TaskFollowerVO> getTaskFollowers(String taskId, String userId);

    /**
     * 查询用户关注的任务列表
     * 
     * @param userId 用户ID
     * @param pageNum 页码
     * @param pageSize 页大小
     * @return 关注的任务列表
     */
    PageResult<TaskFollowerVO> getUserFollowedTasks(String userId, Integer pageNum, Integer pageSize);

    /**
     * 批量关注任务
     * 
     * @param taskIds 任务ID列表
     * @param userId 用户ID
     * @return 关注结果
     */
    Boolean batchFollowTasks(List<String> taskIds, String userId);

    /**
     * 批量取消关注任务
     * 
     * @param taskIds 任务ID列表
     * @param userId 用户ID
     * @return 取消关注结果
     */
    Boolean batchUnfollowTasks(List<String> taskIds, String userId);
}
